package corp.edu.amadeus.core.facade.impl;

import org.apache.log4j.Logger;
import corp.edu.amadeus.core.facade.ifc.IGenericCRUDFacade;
import corp.edu.amadeus.core.business.object.ifc.IPersistable;
import corp.edu.amadeus.core.dao.ifc.IDAOSupport;

public class GenericCRUDFacadeImpl implements IGenericCRUDFacade{

    /** El logger. */
    private static Logger log = Logger.getLogger(GenericCRUDFacadeImpl.class);

    /** El delegado para efectuar los operaciones CRUD */
    private IDAOSupport delegate;

    public GenericCRUDFacadeImpl() {

    }

    public void setDelegate(IDAOSupport h3) {
    	this.delegate =h3;
    }

    /**
     * Borrar <code>po</code> de la capa de persistencia.
     *
     * @param po el objeto persistente
     * @see com.javaloom.spring.ifc.facade.ICRUDFacade#delete(com.javaloom.spring.ifc.persistence.IPersistable)
     */
    public void delete(IPersistable po) {
        this.delegate.delete(po);
    }

    /**
     * Persistir <code>po</code> a la capa de persistencia.
     *
     * @param po el objeto persistente
     * @see com.javaloom.spring.ifc.facade.ICRUDFacade#persist(com.javaloom.spring.ifc.persistence.IPersistable)
     */
    public void persist(IPersistable po) {
        this.delegate.persist(po);
    }

    /**
     * Actualizar <code>po</code> en la capa de persistencia.
     *
     * @param po el objeto persistente
     * @see com.javaloom.spring.ifc.facade.ICRUDFacade#update(com.javaloom.spring.ifc.persistence.IPersistable)
     */
    public void update(IPersistable po) {
        this.delegate.update(po);
    }

    /**
     * Refrescar el estado del PO desde la base de datos.
     *
     * @param po el objeto persistente
     * @see com.javaloom.spring.ifc.facade.ICRUDFacade#refresh(com.javaloom.spring.ifc.persistence.IPersistable)
     */
    public void refresh(IPersistable po) {
        this.delegate.refresh(po);
    }

    /**
     * Guardar o refrescar el objecto persistente.
     *
     * @param po el objecto persistente
     * @see com.javaloom.spring.ifc.facade.ICRUDFacade#saveOrUpdate(com.javaloom.spring.ifc.persistence.IPersistable)
     */
    public void saveOrUpdate(IPersistable po) {
        this.delegate.saveOrUpdate(po);
    }

    /**
     * Forzar la synchronisacion del estado de objectos con la base de datos
     * en una transaccion.
     *
     * @see com.vilaumedia.commons.facade.ifc.ISessionCRUDFacade#flush()
     */
    public void flush() {
        this.delegate.flush();
    }



}

